/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.losalpes.marketplace.pirfb.entities;

import co.com.losalpes.marketplace.pirfb.bos.IntencionBO;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author lesuarez
 */
@SuppressWarnings({"serial", "unused", "unchecked"})
@Entity
@NamedQueries({
    @NamedQuery(name = "getIntencionById",query = "SELECT inten FROM Intencion inten WHERE inten.id = :id"),
    @NamedQuery(name = "getIntencionByNumero",query = "SELECT inten FROM Intencion inten WHERE inten.numero = :numero"),
    @NamedQuery(name = "getListIntencionesByType", query = "SELECT inten FROM Intencion inten WHERE inten.nit = :nit AND inten.tipo = :tipo AND inten.estado = :estado")
})
public class Intencion implements Serializable {

    public static final String T_COMPRA = "COMPRA";
    public static final String T_VENTA = "VENTA";
    public static final String E_ABIERTA = "ABIERTA";
    public static final String E_VENCIDA = "VENCIDA";
    public static final String E_EXITOSA = "EXITOSA";
    public static final String E_BLOQUEADA = "BLOQUEADA";
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column
    private String numero;
    @Column
    private String nit;
    @Column
    private String user;
    /**
     * Compra o Venta
     */
    @Column
    private String tipo;
    @Column
    private String categoria;
    @Column
    private String producto;
    @Column
    private int cantidad;
    @Column
    @Temporal(TemporalType.DATE)
    private Date fecha_entrega;
    @Column
    private long valor;
    @Column
    @Temporal(TemporalType.DATE)
    private Date fecha_max_espera;
    /**
     * ABIERTA: esta habilitada para realizar búsquedas VENCIDA: la fecha máxima
     * de espera fue superada EXITOSA: hubo match independiente de si fue
     * confirmada o no la solicitud y pasa a PO, si se rechaza se vuelve a poner
     * como Abierta para que vuelva a entrar en la búsqueda siempre y cuando no
     * haya superado la fecha máxima de espera BLOQUEADA: no se permite hacer
     * match contra esta intención, por que esta en proceso con otra intención.
     *
     */
    @Column
    private String estado;

    public Intencion() {
    }

    public Intencion(String numero, String nit, String user, String tipo, String categoria, String producto, int cantidad, Date fecha_entrega, long valor, Date fecha_max_espera) {
        this.numero = numero;
        this.nit = nit;
        this.user = user;
        this.tipo = tipo;
        this.categoria = categoria;
        this.producto = producto;
        this.cantidad = cantidad;
        this.fecha_entrega = fecha_entrega;
        this.valor = valor;
        this.fecha_max_espera = fecha_max_espera;
    }

    public Intencion(String numero, String nit, String user, int seq, String tipo, String categoria, String producto, int cantidad, Date fecha_entrega, long valor, Date fecha_max_espera, String estado) {
        this.numero = numero;
        this.nit = nit;
        this.user = user;
        this.id = seq;
        this.tipo = tipo;
        this.categoria = categoria;
        this.producto = producto;
        this.cantidad = cantidad;
        this.fecha_entrega = fecha_entrega;
        this.valor = valor;
        this.fecha_max_espera = fecha_max_espera;
        this.estado = estado;
    }

    public Intencion(IntencionBO intencionBo) {
        this.numero = intencionBo.getNumero();
        this.nit = intencionBo.getNit();
        this.user = intencionBo.getUser();
        this.id = intencionBo.getId();
        this.tipo = intencionBo.getTipo();
        this.categoria = intencionBo.getCategoria();
        this.producto = intencionBo.getProducto();
        this.cantidad = intencionBo.getCantidad();
        this.fecha_entrega = intencionBo.getFecha_entrega();
        this.valor = intencionBo.getValor();
        this.fecha_max_espera = intencionBo.getFecha_max_espera();
        this.estado = intencionBo.getEstado();
    }

    public IntencionBO toBo() {
        IntencionBO ibo = new IntencionBO(this);
        return ibo;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getNit() {
        return nit;
    }

    public void setNit(String nit) {
        this.nit = nit;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public int getId() {
        return id;
    }

    public void setId(int seq) {
        this.id = seq;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

    public String getProducto() {
        return producto;
    }

    public void setProducto(String producto) {
        this.producto = producto;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    public Date getFecha_entrega() {
        return fecha_entrega;
    }

    public void setFecha_entrega(Date fecha_entrega) {
        this.fecha_entrega = fecha_entrega;
    }

    public long getValor() {
        return valor;
    }

    public void setValor(long valor) {
        this.valor = valor;
    }

    public Date getFecha_max_espera() {
        return fecha_max_espera;
    }

    public void setFecha_max_espera(Date fecha_max_espera) {
        this.fecha_max_espera = fecha_max_espera;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }
}
